لدي مجموعة من الأرقام وأنا أستخدم طريقة .push () لإضافة عناصر إليها. هل هناك طريقة بسيطة لإزالة عنصر معين من المصفوفة؟ أنا أبحث عن ما يعادل شيئًا مثل: array.remove (رقم) ؛ لا بد لي من استخدام الأساسية JavaScript. الأطر غير مسموح بها.
1 2 3 4 التالى ابحث عن فهرس عنصر المصفوفة الذي تريد إزالته باستخدام indexOf ، ثم قم بإزالة هذا الفهرس باستخدام لصق. تعمل طريقة splice () على تغيير محتويات المصفوفة بإزالة العناصر الموجودة و / أو إضافة عناصر جديدة. صفيف ثابت = [2 ، 5 ، 9] ؛ console.log (مجموعة) ؛ فهرس const = array.indexOf (5) ؛ إذا (الفهرس> -1) { array.splice (فهرس ، 1) ؛ } // مجموعة = [2 ، 9] console.log (مجموعة) ؛ المعلمة الثانية للربط هي عدد العناصر المراد إزالتها. لاحظ أن لصق يعدل الصفيف في مكانه ويعيد مصفوفة جديدة تحتوي على العناصر التي تمت إزالتها. لسبب الاكتمال ، ها هي الوظائف. تزيل الوظيفة الأولى تكرارًا واحدًا فقط (أي إزالة التطابق الأول من 5 من [2،5،9،1،5،8،5]) ، بينما تزيل الوظيفة الثانية جميع التكرارات: الوظيفة removeItemOnce (arr، value) { var index = arr.indexOf (القيمة) ؛ إذا (الفهرس> -1) { arr.splice (فهرس ، 1) ؛ } العودة آر. } وظيفة removeItemAll (arr، value) { var i = 0 ؛ بينما (أنا= 0 ؛ i--) { إذا (مجموعة [i] === رقم) { array.splice (ط ، 1) ؛ } } إذا كنت ترغب فقط في جعل العنصر في الفهرس لم يعد موجودًا ، لكنك لا تريد تغيير فهارس العناصر الأخرى: حذف مجموعة [i] ؛ | تم تحريره في 2016 أكتوبر افعل ذلك بشكل بسيط وبديهي وصريح (شفرة أوكام) افعل ذلك غير قابل للتغيير (تبقى المجموعة الأصلية دون تغيير) افعل ذلك باستخدام وظائف JavaScript القياسية ، إذا كان متصفحك لا يدعمها - استخدم polyfill في مثال الكود هذا ، أستخدم وظيفة "array.filter (...)" لإزالة العناصر غير المرغوب فيها من المصفوفة. هذه الوظيفة لا تغير المصفوفة الأصلية وتنشئ واحدة جديدة. إذا كان متصفحك لا يدعم هذه الوظيفة (على سبيل المثال Internet Explorer قبل الإصدار 9 ، أو Firefox قبل الإصدار 1.5) ، ففكر في استخدام مرشح polyfill من Mozilla. إزالة العنصر (ECMA-262 Edition 5 code aka oldstyle JavaScript) قيمة var = 3 var arr = [1، 2، 3، 4، 5، 3] arr = arr.filter (الوظيفة (العنصر) { إرجاع العنصر! == القيمة }) console.log (arr) // [1 ، 2 ، 4 ، 5] إزالة العنصر (كود ECMAScript 6) دع القيمة = 3 اسمحوا arr = [1، 2، 3، 4، 5، 3] arr = arr.filter (item => item! == value) console.log (arr) // [1 ، 2 ، 4 ، 5] IMPORTANT ECMAScript 6 "() => {}" بنية وظيفة السهم غير مدعومة في Internet Explorer على الإطلاق ، و Chrome قبل الإصدار 45 ، و Firefox قبل الإصدار 22 ، و Safari قبل الإصدار 10. لاستخدام صيغة ECMAScript 6 في المتصفحات القديمة ، يمكنك استخدام BabelJS. إزالة عدة عناصر (كود ECMAScript 7) ميزة إضافية لهذه الطريقة هي أنه يمكنك إزالة عناصر متعددة السماح للحذف = [2، 3، 5] اسمحوا arr = [1، 2، 3، 4، 5، 3] arr = arr.filter (item =>! forDeletion.includes (item)) // !!! اقرأ أدناه حول المصفوفة.يتضمن (...) الدعم !!! console.log (arr) // [1، 4] مهمة "array.includes (...)" غير مدعومة في Internet Explorer على الإطلاق ، و Chrome قبل الإصدار 47 ، و Firefox قبل الإصدار 43 ، و Safari قبل الإصدار 9 ، و Edge قبل الإصدار 14 ، لذا فهنا عبارة عن polyfill من Mozilla. إزالة عدة عناصر (في المستقبل ، ربما) إذا تم قبول اقتراح "بناء الجملة الملزمة" ، فستتمكن من القيام بذلك: // array-lib.js إزالة وظيفة التصدير (... للحذف) { إرجاع this.filter (item =>! forDeletion.includes (item)) } // main.js استيراد {إزالة} من "./array-lib.js" اسمحوا arr = [1، 2، 3، 4، 5، 3] // :: هذا الاقتراح النحوي الملزم // باستخدام وظيفة "إزالة" باعتبارها "طريقة افتراضية" // بدون تمديد Array.prototype arr = arr :: إزالة (2 ، 3 ، 5) console.log (arr) // [1، 4] جربها بنفسك في BabelJS :) مرجع يشمل Array.prototype التركيب الوظيفي | يعتمد ذلك على ما إذا كنت تريد الاحتفاظ بمكان فارغ أم لا. إذا كنت تريد فتحة فارغة: مجموعة [فهرس] = غير محدد ؛ إذا كنت لا تريد فتحة فارغة: // للاحتفاظ بالأصل: // oldArray = [... مجموعة] ؛ // هذا يعدل المصفوفة. array.splice (فهرس ، 1) ؛ وإذا كنت بحاجة إلى قيمة هذا العنصر ، فيمكنك فقط تخزين عنصر المصفوفة المرتجعة: var value = array.splice (index، 1) [0] ؛ إذا كنت تريد إزالة أي من طرفي المصفوفة ، يمكنك استخدام array.pop () للآخر أو array.shift () لأول واحد (كلاهما يُرجع قيمة العنصر أيضًا). إذا كنت لا تعرف فهرس العنصر ، يمكنك استخدام array.indexOf (عنصر) للحصول عليه (في if () للحصول على عنصر واحد أو بعد فترة () للحصول عليها جميعًا). array.indexOf (عنصر) يُرجع إما الفهرس أو -1 إذا لم يتم العثور عليه. | كان أحد الأصدقاء يواجه مشكلات في Internet Explorer 8 وأظهر لي ما فعله. أخبرته أنه خطأ ، وأخبرني أنه حصل على الجوابهنا. لن تعمل أعلى إجابة حالية في جميع المتصفحات (Internet Explorer 8 على سبيل المثال) ، وستزيل فقط التكرار الأول للعنصر. إزالة كافة الحالات من مجموعة الدالة array_remove_index_by_value (arr، item) { لـ (var i = arr.length ؛ i-- ؛) { إذا (arr [i] === item) {arr.splice (i، 1)؛} } } إنه يتكرر عبر المصفوفة للخلف (حيث ستتغير الفهارس والطول مع إزالة العناصر) ويزيل العنصر إذا تم العثور عليه. يعمل في جميع المتصفحات. | هناك طريقتان رئيسيتان: لصق (): anArray.splice (فهرس ، 1) ؛ حذف: حذف anArray [فهرس] ؛ كن حذرا عند استخدام حذف لمصفوفة. إنه جيد لحذف سمات الكائنات ، ولكنه ليس جيدًا للمصفوفات. من الأفضل استخدام لصق للمصفوفات. ضع في اعتبارك أنه عند استخدام الحذف لمصفوفة قد تحصل على نتائج خاطئة لـ anArray.length. بمعنى آخر ، سيؤدي الحذف إلى إزالة العنصر ، لكنه لن يؤدي إلى تحديث قيمة خاصية length. يمكنك أيضًا توقع وجود فجوات في أرقام الفهرس بعد استخدام الحذف ، على سبيل المثال قد ينتهي بك الأمر بالحصول على الفهارس 1 و 3 و 4 و 8 و 9 و 11 والطول كما كان قبل استخدام الحذف. في هذه الحالة ، ستتعطل جميع حلقات for المفهرسة ، لأن الفهارس لم تعد متسلسلة. إذا اضطررت إلى استخدام حذف لسبب ما ، فيجب عليك استخدام كل حلقة عندما تحتاج إلى تكرار المصفوفات. في واقع الأمر ، تجنب دائمًا استخدام حلقات for المفهرسة ، إن أمكن. بهذه الطريقة ستكون الشفرة أكثر قوة وأقل عرضة لمشاكل الفهارس. | Array.prototype.remove_by_value = الوظيفة (val) { لـ (var i = 0؛ i row.id === 5) ؛ var تمت إزالتها = helper.remove (arr، row => row.name.startsWith ('BMW')) ؛ ##تعريف var helper = { // إزالة وإعادة التواجد الأول removeOne: دالة (مصفوفة ، مسند) { لـ (var i = 0؛ i [2، 3، 4] | يمكنك استخدام ES6. على سبيل المثال لحذف القيمة "3" في هذه الحالة: var array = ['1'، '2'، '3'، '4'، '5'، '6'] var newArray = array.filter ((القيمة) => القيمة! = '3') ؛ console.log (newArray) ؛ انتاج : ["1" ، "2" ، "4" ، "5" ، "6"] | إذا كنت تريد مصفوفة جديدة مع إزالة المواضع المحذوفة ، يمكنك دائمًا حذف العنصر المحدد وتصفية المصفوفة. قد يحتاج إلى امتداد لكائن المصفوفة للمتصفحات التي لا تطبق طريقة التصفية ، ولكن على المدى الطويل يكون الأمر أسهل لأن كل ما تفعله هو: var my_array = [1، 2، 3، 4، 5، 6] ؛ حذف my_array [4] ؛ console.log (my_array.filter (function (a) {return typeof a! == 'undefined'؛})) ؛ يجب أن تعرض [1 ، 2 ، 3 ، 4 ، 6]. | فيما يلي بعض الطرق لإزالة عنصر من مصفوفة باستخدام JavaScript. كل الطرق الموصوفة لا تغير المصفوفة الأصلية ، وبدلاً من ذلك قم بإنشاء واحدة جديدة. إذا كنت تعرف فهرس عنصر لنفترض أن لديك مصفوفة ، وتريد إزالة عنصر في الموضع i. إحدى الطرق هي استخدام slice (): عناصر const = ['a'، 'b'، 'c'، 'd'، 'e'، 'f'] كونست أنا = 3 const filteredItems = items.slice (0، i) .concat (items.slice (i + 1، items.length)) console.log (filteredItems) slice () ينشئ مصفوفة جديدة بالفهارس التي يتلقاها. نقوم ببساطة بإنشاء مصفوفة جديدة ، من البداية إلى الفهرس الذي نريد إزالته ، وربط مصفوفة أخرى من الموضع الأول بعد الوضع الذي قمنا بإزالته إلى نهاية المصفوفة. إذا كنت تعرف القيمة في هذه الحالة ، أحد الخيارات الجيدة هو استخدام عامل التصفية () ، والذي يقدم طريقة أكثر وضوحًا: عناصر const = ['a'، 'b'، 'c'، 'd'، 'e'، 'f'] قيمة constToRemove = 'c' const filteredItems = items.filter (item => item! == valueToRemove) console.log (filteredItems) يستخدم هذا وظائف سهم ES6. يمكنك استخدام الوظائف التقليدية لدعم المتصفحات القديمة: عناصر const = ['a'، 'b'، 'c'، 'd'، 'e'، 'f'] قيمة constToRemove = 'c' const filteredItems = items.filter (الوظيفة (العنصر) { إرجاع العنصر! == valueToRemove }) console.log (filteredItems) أو يمكنك استخدام Babel وإعادة تحويل كود ES6 إلى ES5 لجعله أكثر قابلية للفهم في المتصفحات القديمة ، مع كتابة JavaScript حديث في التعليمات البرمجية الخاصة بك. إزالة عدة عناصر ماذا لو كنت تريد إزالة العديد من العناصر بدلاً من عنصر واحد؟ لنجد أبسط حل. حسب الفهرس يمكنك فقط إنشاء وظيفة وإزالة العناصر في سلسلة: عناصر const = ['a'، 'b'، 'c'، 'd'، 'e'، 'f'] const removeItem = (العناصر ، أنا) => items.slice (0، i-1) .concat (items.slice (i، items.length)) اسمحوا filteredItems = removeItem (العناصر ، 3) filteredItems = removeItem (filteredItems، 5) //["ا ب ت ث"] console.log (filteredItems) بالقيمة يمكنك البحث عن التضمين داخل وظيفة رد الاتصال: عناصر const = ['a'، 'b'، 'c'، 'd'، 'e'، 'f'] قيم ثابتةToRemove = ['c'، 'd'] const filteredItems = items.filter (item =>! قيم ToRemove.includes (عنصر)) // ["أ" ، "ب" ، "هـ" ، "و"] console.log (filteredItems) تجنب تحور المصفوفة الأصلية splice () (يجب عدم الخلط بينه وبين slice ()) يغير المصفوفة الأصلية ، ويجب تجنبه. (تم النشر في الأصل على موقعي https://flaviocopes.com/how-to-remove-item-from-array/) | تحقق من هذا الرمز. إنه يعمل في كل متصفح رئيسي. remove_item = وظيفة (arr ، قيمة) { فار ب = "؛ لـ (b in arr) { إذا (arr [b] === القيمة) { arr.splice (ب ، 1) ؛ استراحة؛ } } العودة آر. } ؛ استدعاء هذه الوظيفة remove_item (صفيف ، قيمة) ؛ | ES6 وبدون طفرة: (أكتوبر 2016) const removeByIndex = (قائمة ، فهرس) => [ ... list.slice (0 ، فهرس) ، ... list.slice (فهرس + 1) ] ؛ الإخراج = removeByIndex ([33،22،11،44]، 1) // => [33،11،44] console.log (الإخراج) | يمكنك استخدام Lodash _.pull (مصفوفة متحولة) أو _.pullAt (مصفوفة متحولة) أو _.without (لا يغير المصفوفة) ، var array1 = ['a'، 'b'، 'c'، 'd'] _.pull (array1، "c") console.log (array1) // ['a'، 'b'، 'd'] var array2 = ['e'، 'f'، 'g'، 'h'] _.pullAt (array2، 0) console.log (array2) // ['f'، 'g'، 'h'] var array3 = ['i'، 'j'، 'k'، 'l'] var newArray = _.without (array3، 'i') // ['j'، 'k'، 'l'] console.log (array3) // ['i'، 'j'، 'k'، 'l'] | يمكن إزالة عنصر / سلسلة معينة من مصفوفة في سطر واحد: theArray.splice (theArray.indexOf ("stringToRemoveFromArray")، 1)؛ أين: theArray: المصفوفة التي تريد إزالة شيء معين منها stringToRemoveFromArray: السلسلة التي تريد إزالتها و 1 هي مقدار العناصر التي تريد إزالتها. ملحوظة: إذا لم يكن "stringToRemoveFromArray" موجودًا في المصفوفة ، فسيؤدي ذلك إلى إزالة العنصر الأخير من المصفوفة. من الممارسات الجيدة دائمًا التحقق مما إذا كان العنصر موجودًا في صفيفك أولاً ، قبل إزالته. إذا (theArray.indexOf ("stringToRemoveFromArray")> = 0) { theArray.splice (theArray.indexOf ("stringToRemoveFromArray")، 1)؛ } إذا كان لديك وصول إلى إصدارات Ecmascript الأحدث على أجهزة كمبيوتر العميل (تحذير ، قد لا تعمل على المحطات القديمة): var array = ['1'، '2'، '3'، '4'، '5'، '6'] var newArray = array.filter ((القيمة) => القيمة! = '3') ؛ حيث "3" هي القيمة التي تريد إزالتها من المصفوفة. ستصبح المصفوفة بعد ذلك: ['1'، '2'، '4'، '5'، '6'] | حسنًا ، على سبيل المثال لديك المصفوفة أدناه: var num = [1، 2، 3، 4، 5] ؛ ونريد حذف الرقم 4. يمكنك ببساطة استخدام الكود أدناه: num.splice (num.indexOf (4)، 1) ؛ // num سيكون [1، 2، 3، 5] ؛ إذا كنت تعيد استخدام هذه الوظيفة ، فستكتب دالة قابلة لإعادة الاستخدام والتي سيتم إرفاقها بوظيفة المصفوفة الأصلية كما يلي: Array.prototype.remove = Array.prototype.remove || الوظيفة (x) { const i = this.indexOf (x) ؛ إذا (أنا === - 1) إرجاع؛ this.splice (ط ، 1) ؛ // num.remove (5) === [1، 2، 3] ؛ } ولكن ماذا لو كان لديك المصفوفة أدناه بدلاً من بضع [5] في المصفوفة؟ var num = [5، 6، 5، 4، 5، 1، 5] ؛ نحتاج إلى حلقة لفحصها جميعًا ، ولكن الطريقة الأسهل والأكثر فاعلية هي استخدام وظائف JavaScript المضمنة ، لذلك نكتب دالة تستخدم مرشحًا مثل أدناه بدلاً من ذلك: const _removeValue = (arr، x) => arr.filter (n => n! == x) ؛ // _ removeValue ([1، 2، 3، 4، 5، 5، 6، 5]، 5) // إرجاع [1، 2، 3، 4، 6] هناك أيضًا مكتبات تابعة لجهات خارجية تساعدك على القيام بذلك ، مثل Lodash أو Underscore. لمزيد من المعلومات ، انظر إلى Lodash _.pull أو _.pullAt أو _.without. | أداء اليوم (2019-12-09) أجري اختبارات الأداء على macOS v10.13.6 (High Sierra) للحلول المختارة. أظهر حذف (A) ، لكنني لا أستخدمه بالمقارنة مع الطرق الأخرى ، لأنه ترك مساحة فارغة في المصفوفة. الاستنتاجات الحل الأسرع هو array.splice (C) (باستثناء Safari للمصفوفات الصغيرة حيث توجد المرة الثانية) بالنسبة إلى المصفوفات الكبيرة ، يعد array.slice + splice (H) أسرع حل غير قابل للتغيير لمتصفح Firefox و Safari ؛ Array.from (B) هو الأسرع في Chrome عادة ما تكون الحلول القابلة للتغيير 1.5x-6x أسرع من غير قابلة للتغيير بالنسبة للطاولات الصغيرة على Safari ، من المدهش أن الحل القابل للتغيير (C) أبطأ من الحل الثابت (G) تفاصيل في الاختبارات أقوم بإزالة العنصر الأوسط من المصفوفة بطرق مختلفة. الحلول A و C في مكانها الصحيح. الحلول B ، D ، E ، F ، G ، H غير قابلة للتغيير. نتائج مصفوفة تحتوي على 10 عناصر في Chrome ، يعد array.splice (C) هو أسرع حل موضعي. يعتبر array.filter (D) هو الحل الأسرع غير القابل للتغيير. الأبطأ هو array.slice (F). يمكنك إجراء الاختبار على جهازك هنا. نتائج مصفوفة تحتوي على 1.000.000 عنصر في Chrome ، يعد array.splice (C) هو أسرع حل موضعي (يكون الحذف (C) سريعًا - لكنه ترك فتحة فارغة في المصفوفة (لذلك لا يؤدي "إزالة كاملة")). يعتبر array.slice-splice (H) هو الحل الأسرع غير القابل للتغيير. الأبطأ هو array.filter (D و E). يمكنك إجراء الاختبار على جهازك هنا. var a = [0 ، 1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7 ، 8 ، 9] ؛ var log = (letter، array) => console.log (letter، array.join `،`)؛ وظيفة أ (مجموعة) { var index = array.indexOf (5) ؛ حذف مجموعة [فهرس] ؛ سجل ('A' ، مجموعة) ؛ } الوظيفة ب (مجموعة) { var index = array.indexOf (5) ؛ var arr = Array.from (مجموعة) ؛ arr.splice (فهرس، 1) سجل ('B' ، arr) ؛ } الوظيفة C (مجموعة) { var index = array.indexOf (5) ؛ array.splice (فهرس ، 1) ؛ سجل ('C' ، صفيف) ؛ } الوظيفة D (مجموعة) { var arr = array.filter (item => item! == 5) سجل ('D' ، arr) ؛ } الوظيفة E (مجموعة) { var index = array.indexOf (5) ؛ var arr = array.filter ((item، i) => i! == index) تسجيل الدخول ('E' ، arr) ؛ } الوظيفة F (مجموعة) { var index = array.indexOf (5) ؛ var arr = array.slice (0، index) .concat (array.slice (index + 1)) سجل ('F' ، arr) ؛ } وظيفة G (مجموعة) { var index = array.indexOf (5) ؛ var arr = [... array.slice (0، index)، ... array.slice (index + 1)] سجل ('G' ، arr) ؛ } الوظيفة ح (مجموعة) { var index = array.indexOf (5) ؛ var arr = array.slice (0) ؛ arr.splice (فهرس ، 1) ؛ سجل ('H' ، arr) ؛ } أ ([... أ]) ؛ ب ([... أ]) ؛ ج ([... أ]) ؛ د ([... أ]) ؛ ه ([... أ]) ؛ F ([... أ]) ؛ G ([... أ]) ؛ ح ([... أ]) ؛ يقدم هذا المقتطف التعليمات البرمجية المستخدمة في اختبارات الأداء فقط - ولا يقوم بإجراء الاختبارات بنفسه. مقارنة للمتصفحات: Chrome v78.0.0 و Safari v13.0.4 و Firefox v71.0.0 | أنا جديد تمامًا على JavaScript وأحتاج إلى هذه الوظيفة. لقد كتبت هذا فقط: وظيفة removeFromArray (مصفوفة ، عنصر ، فهرس) { while ((index = array.indexOf (item))> -1) { array.splice (فهرس ، 1) ؛ } } ثم عندما أريد استخدامه: // قم بإعداد بعض البيانات الوهمية var dummyObj = {name: "meow"} ؛ var dummyArray = [dummyObj، "item1"، "item1"، "item2"]؛ // إزالة البيانات الوهمية removeFromArray (dummyArray ، dummyObj) ؛ removeFromArray (dummyArray، "item2") ؛ الإخراج - كما هو متوقع. ["item1"، "item1"] قد تكون لديك احتياجات مختلفة عني ، لذا يمكنك تعديلها بسهولةلتناسبهم. آمل أن يساعد هذا شخص ما. | إذا كان لديك كائنات معقدة في المصفوفة يمكنك استخدام المرشحات؟ في المواقف التي لا يكون فيها $ .inArray أو array.splice سهل الاستخدام. خاصة إذا كانت الكائنات ربما تكون ضحلة في المصفوفة. على سبيل المثال إذا كان لديك كائن به حقل Id وتريد إزالة الكائن من مصفوفة: this.array = this.array.filter (function (element، i) { إرجاع element.id! == idToRemove ؛ }) ؛ | أريد الإجابة بناءً على ECMAScript 6. افترض أن لديك مصفوفة مثل أدناه: اسمحوا arr = [1،2،3،4] ؛ إذا كنت تريد الحذف في فهرس خاص مثل 2 ، فاكتب الكود أدناه: arr.splice (2 ، 1) ؛ // => arr أصبح [1،2،4] ولكن إذا كنت تريد حذف عنصر خاص مثل 3 ولا تعرف فهرسه ، فافعل ما يلي: arr = arr.filter (e => e! == 3) ؛ // => arr أصبح [1،2،4] تلميح: يرجى استخدام وظيفة السهم لفلترة رد الاتصال ما لم تحصل على مصفوفة فارغة. | تحديث: يوصى بهذه الطريقة فقط إذا لم تتمكن من استخدام ECMAScript 2015 (المعروف سابقًا باسم ES6). إذا كان بإمكانك استخدامه ، فإن الإجابات الأخرى هنا توفر تطبيقات أكثر إتقانًا. سيحل هذا المضمون هنا مشكلتك ، كما يحذف جميع تكرارات الوسيطة بدلاً من 1 فقط (أو قيمة محددة). Array.prototype.destroy = الوظيفة (obj) { // إرجاع فارغ إذا لم يتم العثور على كائنات وإزالتها فار دمرت = لا شيء ؛ لـ (var i = 0؛ i 3 x.destroy (خطأ) ؛ // => خطأ العاشر ؛ // => [1، 2، true، undefined] x.destroy (صحيح) ؛ // => صحيح x.destroy (غير محدد) ؛ // => غير محدد العاشر ؛ // => [1، 2] x.destroy (3) ؛ // => خالية العاشر ؛ // => [1، 2] | تحديث ES10 يلخص هذا المنشور الأساليب الشائعة لإزالة العناصر من المصفوفة اعتبارًا من ECMAScript 2019 (ES10). 1. قضايا عامة 1.1. إزالة عنصر المصفوفة بالقيمة باستخدام .splice () | في المكان: نعم | | يزيل التكرارات: نعم (حلقة) ، لا (فهرس) | | حسب القيمة / الفهرس: حسب الفهرس | إذا كنت تعرف القيمة التي تريد إزالتها من مصفوفة ، يمكنك استخدام طريقة لصق. يجب أولاً تحديد فهرس العنصر المستهدف. يمكنك بعد ذلك استخدام الفهرس كعنصر بداية وإزالة عنصر واحد فقط. // مع حلقة "for" const arr = [1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7 ، 8 ، 9 ، 0] ؛ لـ (let i = 0؛ i [1 ، 2 ، 3 ، 4 ، 6 ، 7 ، 8 ، 9 ، 0] // باستخدام طريقة .indexOf () const arr = [1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7 ، 8 ، 9 ، 0] ؛ const i = arr.indexOf (5) ؛ arr.splice (أنا ، 1) ؛ // => [1 ، 2 ، 3 ، 4 ، 6 ، 7 ، 8 ، 9 ، 0] 1.2 إزالة عنصر Array باستخدام طريقة .filter () | في المكان: لا | | يزيل التكرارات: نعم | | بالقيمة / الفهرس: بالقيمة | يمكن تصفية عنصر معين من المصفوفة ، من خلال توفير وظيفة التصفية. ثم يتم استدعاء هذه الوظيفة لكل عنصر في المصفوفة. قيمة ثابت = 3 اسمحوا arr = [1، 2، 3، 4، 5، 3] arr = arr.filter (item => item! == value) console.log (arr) // [1 ، 2 ، 4 ، 5] 1.3 إزالة عنصر Array بتوسيع Array.prototype | في المكان: نعم / لا (يعتمد على التنفيذ) | | يزيل التكرارات: نعم / لا (يعتمد على التنفيذ) | | بالقيمة / الفهرس: بالمؤشر / بالقيمة (يعتمد على التنفيذ) | يمكن تمديد النموذج الأولي للصفيف بطرق إضافية. ستكون هذه الطرق متاحة بعد ذلك لاستخدامها في المصفوفات المنشأة. ملاحظة: يعتبر البعض تمديد النماذج الأولية للكائنات من مكتبة JavaScript القياسية (مثل Array) بمثابة مضاد. // في المكان ، يزيل الكل ، من خلال تنفيذ القيمة Array.prototype.remove = الوظيفة (العنصر) { لـ (let i = 0؛ i = ES10) | في المكان: لا | | يزيل التكرارات: نعم | | بالقيمة / الفهرس: بالقيمة | قدم ES10 Object.fromEntries ، والذي يمكن أن يكونتُستخدم لإنشاء صفيف مرغوب من أي كائن يشبه المصفوفة وتصفية العناصر غير المرغوب فيها أثناء العملية. كائن const = [1،2،3،4] ؛ قيمة constToRemove = 3 ؛ const arr = Object.values (Object.fromEntries ( مدخلات الكائن (كائن) .filter (([key، val]) => val! == valueToRemove) )) ؛ console.log (arr) ؛ // [1،2،4] 2. حالات خاصة 2.1 إزالة العنصر إذا كان في نهاية المصفوفة 2.1.1. تغيير طول المصفوفة | في المكان: نعم | | يزيل التكرارات: لا | | حسب القيمة / الفهرس: N / A | يمكن إزالة عناصر مصفوفة JavaScript من نهاية المصفوفة عن طريق ضبط خاصية length على قيمة أقل من القيمة الحالية. ستتم إزالة أي عنصر يكون فهرسه أكبر من الطول الجديد أو مساويًا له. const arr = [1 ، 2 ، 3 ، 4 ، 5 ، 6] ؛ الطول = 5 ؛ // ضبط الطول لإزالة العنصر console.log (arr) ؛ // [1 ، 2 ، 3 ، 4 ، 5] 2.1.2. استخدام طريقة .pop () | في المكان: نعم | | يزيل التكرارات: لا | | حسب القيمة / الفهرس: N / A | تزيل طريقة pop العنصر الأخير من المصفوفة ، وتُعيد هذا العنصر ، وتُحدِّث خاصية length. يقوم التابع pop بتعديل المصفوفة التي تم استدعاؤها عليها ، وهذا يعني أنه بخلاف استخدام الحذف ، تتم إزالة العنصر الأخير تمامًا وتقليل طول الصفيف. const arr = [1 ، 2 ، 3 ، 4 ، 5 ، 6] ؛ arr.pop () ؛ // يُرجع 6 console.log (arr) ؛ // [1 ، 2 ، 3 ، 4 ، 5] 2.2. إزالة العنصر إذا كان في بداية المصفوفة | في المكان: نعم | | يزيل التكرارات: لا | | حسب القيمة / الفهرس: N / A | تعمل طريقة .shift () مثل طريقة pop إلا أنها تزيل العنصر الأول من مصفوفة JavaScript بدلاً من العنصر الأخير. عند إزالة العنصر ، يتم إزاحة العناصر المتبقية إلى أسفل. const arr = [1، 2، 3، 4] ؛ arr.shift () ، // يُرجع 1 console.log (arr) ؛ // [2، 3، 4] 2.3 إزالة العنصر إذا كان العنصر الوحيد في المصفوفة | في المكان: نعم | | يزيل التكرارات: N / A | | حسب القيمة / الفهرس: N / A | الأسلوب الأسرع هو ضبط متغير مصفوفة على مصفوفة فارغة. اسمحوا arr = [1] ؛ arr = [] ؛ // مجموعة فارغة بدلاً من ذلك ، يمكن استخدام التقنية من 2.1.1 عن طريق ضبط الطول على 0. | يجب ألا تغير صفيفتك أبدًا. لأن هذا ضد نمط البرمجة الوظيفية. يمكنك إنشاء مصفوفة جديدة دون الرجوع إلى المصفوفة التي تريد تغيير بياناتها باستخدام مرشح أسلوب ECMAScript 6 ؛ var myArray = [1، 2، 3، 4، 5، 6] ؛ لنفترض أنك تريد إزالة 5 من المصفوفة ، يمكنك ببساطة القيام بذلك على النحو التالي: myArray = myArray.filter (القيمة => القيمة! == 5) ؛ سيعطيك هذا مصفوفة جديدة بدون القيمة التي تريد إزالتها. لذلك ستكون النتيجة: [1 ، 2 ، 3 ، 4 ، 6] ؛ // 5 تمت إزالته من هذه المجموعة لمزيد من الفهم يمكنك قراءة وثائق MDN على Array.filter. | نهج ECMAScript 2015 أكثر حداثة (المعروف سابقًا باسم Harmony أو ES 6). معطى: عناصر const = [1 ، 2 ، 3 ، 4] ؛ مؤشر كونست = 2 ؛ ثم: items.filter ((x، i) => i! == index) ؛ الاستسلام: [1، 2، 4] يمكنك استخدام Babel وخدمة polyfill لضمان دعم ذلك جيدًا عبر المتصفحات. | يمكنك عمل حلقة للخلف للتأكد من عدم إفساد الفهارس ، إذا كانت هناك حالات متعددة للعنصر. var myElement = "شوكولاتة" ؛ var myArray = ['chocolate'، 'poptart'، 'poptart'، 'poptart'، 'chocolate'، 'poptart'، 'poptart'، 'chocolate']؛ / * رمز هام * / لـ (var i = myArray.length - 1 ؛ i> = 0 ؛ i--) { إذا (myArray [i] == myElement) myArray.splice (i، 1) ؛ } console.log (myArray) ؛ عرض حي | لديك من 1 إلى 9 في المصفوفة ، وتريد إزالة 5. استخدم الكود أدناه: var numberArray = [1، 2، 3، 4، 5، 6، 7، 8، 9] ؛ var newNumberArray = numberArray.filter (m => { العودة م! == 5 ؛ }) ؛ console.log ("صفيف جديد ، 5 تمت إزالته" ، newNumberArray) ؛ إذا كنت تريد قيم متعددة. مثال: - 1،7،8 var numberArray = [1، 2، 3، 4، 5، 6، 7، 8، 9] ؛ var newNumberArray = numberArray.filter (m => { العودة (م! == 1) && (م! == 7) && (م! == 8) ؛ }) ؛ console.log ("new Array، 1،7 and 8 إزالتها"، newNumberArray)؛ إذا كنت تريد إزالة قيمة مصفوفة في مصفوفة. مثال: [3،4،5] var numberArray = [1، 2، 3، 4، 5، 6، 7، 8، 9] ؛ var removebleArray = [3،4،5] ، var newNumberArray = numberArray.filter (m => { return! removebleArray.includes (m) ؛ }) ؛ console.log ("صفيف جديد ، [3،4،5] تمت إزالته" ، newNumberArray) ؛ يتضمن المستعرض المدعوم الارتباط. | 1 2 3 4 التالى سؤال نشط للغاية. اكسب 10 سمعة للإجابة على هذا السؤال. تساعد متطلبات السمعة في حماية هذا السؤال من البريد العشوائي ونشاط عدم الإجابة. ليس الجواب الذي تبحث عنه؟ تصفح الأسئلة الأخرى ذات علامات صفائف جافا سكريبت أو اطرح سؤالك الخاص.